import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;

public class Tank {
	public static final int XSPEED = 5;
    public static final int YSPEED = 5;
    public static final int WIDTH = 30;
    public static final int HEIGHT = 30;
    private Direction ptDir = Direction.D;

    TankClient tc=null;
	private int x,y;
	private boolean bL = false;
    private boolean bU = false;
    private boolean bR = false;
    private boolean bD = false;
    enum Direction {L, LU, U, RU, R, RD, D, LD, STOP}
    TankClient tc=null;
   

    private Direction dir = Direction.STOP;

	public Tank(int x, int y, TankClient tc) {
        this.x = x;
        this.y = y;
        this.tc = tc;

		
	}
	public void draw(Graphics g) {
		Color c= g.getColor();
	     g.setColor(Color.RED);
	     g.fillOval(x, y, 30, 30);
	     g.setColor(c);
	     move();
	
	
	     switch (ptDir) {
         case L:
             g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x, y + Tank.HEIGHT / 2);
             break;
         case LU:
             g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x, y);
             break;
         case U:
             g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH / 2, y);
             break;
         case RU:
             g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH, y);
             break;
         case R:
             g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH, y + Tank.HEIGHT / 2);
             break;
         case RD:
             g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH, y + Tank.HEIGHT);
             break;
         case D:
             g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x + Tank.WIDTH / 2, y + Tank.HEIGHT);
             break;
         case LD:
             g.drawLine(x + Tank.WIDTH / 2, y + Tank.HEIGHT / 2, x, y + Tank.HEIGHT);
             break;
         case STOP:
             break;
     }



	}
	void move(){
		Missile m = new Missile(x, y,ptDir);
		switch (dir) {
        case L:
            x -= XSPEED;
            break;
        case LU:
            x -= XSPEED;
            y -= YSPEED;
            break;
        case U:
            y -= YSPEED;
            break;
        case RU:
            x += XSPEED;
            y -= YSPEED;
            break;
        case R:
            x += XSPEED;
            break;
        case RD:
            x += XSPEED;
            y += YSPEED;
            break;
        case D:
            y += XSPEED;
            break;
        case LD:
            x -= XSPEED;
            y += YSPEED;
            break;
        case STOP:
            break;
    }
		

				locateDirection();

	}
	void locateDirection() {//ȷ
        if (bL && !bU && !bR & !bD) dir = Direction.L;
        else if (bL && bU && !bR && !bD) dir = Direction.LU;
        else if (!bL && bU && !bR && !bD) dir = Direction.U;
        else if (!bL && bU && bR && !bD) dir = Direction.RU;
        else if (!bL && !bU && bR && !bD) dir = Direction.R;
        else if (!bL && !bU && bR && bD) dir = Direction.RD;
        else if (!bL && !bU && !bR && bD) dir = Direction.D;
        else if (bL && !bU && !bR && bD) dir = Direction.LD;
        else if (!bL && !bU && !bR && !bD) dir = Direction.STOP;

    }
	public Missile fire() {
	       
        int x = this.x + Tank.WIDTH / 2 - Missile.WIDTH / 2;
        int y = this.y + Tank.HEIGHT / 2 - Missile.WIDTH / 2;
 
        if (this.dir != Direction.STOP) {
            this.ptDir = this.dir;
        }

 Missile m = new Missile(x, y,dir);
 
 return m;
 }

	public void keyPressed(KeyEvent e) {
		 
		 
		 int key =e.getKeyCode();
	switch(key) {
	case KeyEvent.VK_LEFT:
		x-=5;
		break;
	case KeyEvent.VK_UP:
		y-=5;
		break;
	case KeyEvent.VK_RIGHT:
		x+=5;
		break;
	case KeyEvent.VK_DOWN:
		y+=5;
		break;
	case KeyEvent.VK_CONTROL:
	
		tc.m=fire();
		break;

	}
	locateDirection();

}

	public void keyReleased(KeyEvent e) {
		int key = e.getKeyCode();
		switch(key) {
			case KeyEvent.VK_LEFT:
				bL = false;
				break;
			case KeyEvent.VK_UP:
				bU = false;
				break;
			case KeyEvent.VK_RIGHT:
				bR = false;
				break;
			case KeyEvent.VK_DOWN:
				bD = false;
				break;
				
		}
		locateDirection();
	}
	
		

}